home *** CD-ROM | disk | FTP | other *** search
- /*
- * doincl.c -- expand include directives (recursively)
- *
- * Usage: doinclude [-o outfile] filename...
- *
- * Doinclude copies a C source file, expanding non-system include directives.
- * For each line of the form
- * #include "filename"
- * the named file is interpolated; all other lines are copied verbatim.
- *
- * No error is generated if a file cannot be opened.
- */
-
- #include "::h:rt.h"
-
- int doinclude Params((char *fname));
-
- #define MAXLINE 500 /* maximum line length */
-
- FILE *outfile; /* output file */
-
- main(argc, argv)
- int argc;
- char *argv[];
- {
- char *progname = argv[0];
-
- outfile = stdout;
- if (argc > 3 && strcmp(argv[1], "-o") == 0) {
- if (outfile = fopen(argv[2], "w")) {
- argv += 2;
- argc -= 2;
- }
- else {
- perror(argv[2]);
- exit(1);
- }
- }
- if (argc < 2) {
- fprintf(stderr, "usage: %s [-o outfile] filename...\n", progname);
- exit(1);
- }
-
- fprintf(outfile,
- "/***** do not edit -- this file was generated mechanically *****/\n\n");
- while (--argc > 0)
- doinclude(*++argv);
- exit(0);
- }
-
- doinclude(fname)
- char *fname;
- {
- FILE *f;
- char line[MAXLINE], newname[MAXLINE], *p;
-
- fprintf(outfile, "\n\n/****************************************");
- fprintf(outfile, " from %s: */\n\n", fname);
- if (f = fopen(fname, "r")) {
- while (fgets(line, MAXLINE, f))
- if (sscanf(line, " # include \"%s\"", newname) == 1) {
- for (p = newname; *p != '\0' && *p != '"'; p++)
- ;
- *p = '\0'; /* strip off trailing '"' */
- doinclude(newname); /* include file */
- }
- else
- fputs(line, outfile); /* not an include directive */
- fclose(f);
- }
- else {
- fprintf(outfile, "/* [file not found] */\n");
- }
- fprintf(outfile, "\n/****************************************");
- fprintf(outfile, " end %s */\n", fname);
- }
-